/*
 * UVa 1583
 * 生成元
 *
 * 如果 x 加上 x 的各个数字之和得到 y，就说 x 是 y 的生成元。
 * 给出 n（1 <= n <= 100000），求最小生成元。
 * 无解输出 0。
 */
/*
  样例输入：
  3
  216
  121
  2005
  样例输出：
  198
  0
  1979
*/

// 法一：暴力枚举
// #include <iostream>
// #include <fstream>
// #define LOCAL
// using namespace std;
// int getBits(int x)
// {
//     // 计算位数
//     int count = 1;
//     while (x /= 10)
//         ++count;
//     return count;
// }
// int digitsum(int x)
// {
//     // 计算各个位上的数字之和
//     int sum = 0;
//     do
//         sum += x % 10;
//     while (x /= 10);
//     return sum;
// }
// int main()
// {
// #ifdef LOCAL
//     ifstream cin("in.txt");
//     ofstream cout("out.txt");
// #endif
//     int n, y;
//     cin >> n;
//     for (int i = 0; i < n; ++i)
//     {
//         cin >> y;
//         int bits = getBits(y); // 存 y 有多少位数
//         int x = y - bits * 9;  // 枚举起始值
//         for (; x != y; ++x)
//             if (x + digitsum(x) == y)
//                 break;
//         cout << (x == y ? 0 : x) << endl;
//     }
//     return 0;
// }

// 课本答案
// 法二：也是枚举，但一次性枚举 100000 内的所有正整数 m，
//       标记 m 加上 m 的各个数字之和，最后查表即可。
#include <stdio.h>
#include <string.h>
#define LOCAL
#define maxn 100005
int ans[maxn];
int main()
{
#ifdef LOCAL
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    int T, n;
    memset(ans, 0, sizeof(ans));
    for (int m = 1; m < maxn; m++)
    {
        int x = m, y = m;
        while (x > 0)
        {
            y += x % 10;
            x /= 10;
        }
        if (ans[y] == 0 || m < ans[y])
            ans[y] = m;
    }
    scanf("%d", &T);
    while (T--)
    {
        scanf("%d", &n);
        printf("%d\n", ans[n]);
    }
    return 0;
}

// 拓展：如果 0 <= n <= 1e100 呢
// 用字符串存输入
// #include <iostream>
// #include <fstream>
// #include <string>
// #define LOCAL
// using namespace std;
// const int lastBits = 4; // 表示取末位 lastBits 个数
// int str_to_int(const string &str)
// {
//     // 将 str 的 lastBits 个末位数字转换成 int
//     int ret = 0;
//     auto end = str.cend(),      // 尾
//         begin = end - lastBits; // 起始
//     while (end > begin)
//     {
//         ret *= 10;
//         ret += (*begin++ - '0');
//     }
//     return ret;
// }
// int main()
// {
// #ifdef LOCAL
//     ifstream cin("in.txt");
//     ofstream cout("out.txt");
// #endif
//     int n;
//     cin >> n;
//     string s; // 存输入。用 int 存储可能会溢出
//     for (int i = 0; i < n; ++i)
//     {
//         cin >> s;
//         int sum = 0; // 存各个位上的数字之和
//         for (const auto i : s)
//             sum += i - '0';
//         /*
//           根据定义，
//           x + digitsum(x) == y，则 x 是 y 的生成元。
//           显然有
//           0 <= digitsum(x) <= x的位数 * 9
//           因此，
//           1.生成元有边界。
//             已知 y，则 x 的范围为 (y - 9*y的位数, y)
//           当 x的位数为 100 时，digitsum(x) < 1000，不到 4 位
//           当 x的位数为 1000 时，digitsum(x) < 10000，不到 5 位
//           因此，
//           2.比较 x + digitsum(x) 和 y 时，
//             多数情况下只需要比较二者的末位几个数。
//         */
//         int end = str_to_int(s),          // 取末尾数为枚举临界值
//             begin = end - s.length() * 9; // 枚举起始值
//         for (; begin != end; ++begin)
//             if (begin + sum == end)
//                 break;
//         // 输出
//         if (begin == end)
//             cout << 0 << endl;
//         else
//             cout << begin << endl;
//     }
//     return 0;
// }